FILE: TAPE_MANA:TOS HEWLETT-PACKARD: TAPE_MANAGER (c) Coleco 1983 Confidential Tue, 15 May 1984, 20:30 Page 1 1 ;^Z80^ 3 ;NAME ^Rev 6 - DTT^ 4 5 DESCR_ MACRO 6 .GOTO ENDESCR_1 7 8 Author: DTT 9 Project: ________, ___ 10 Starting date:18feb83 11 12 Prom release Date: 13 Prom release Rev: 14 15 Header Rev: 3 16 17 ******************************** 18 * * 19 * TAPE_MANAGER DTT * 20 * * 21 ******************************** 22 23 Rev History (one line note indicating the change) 24 25 Rev. Date Name Change 26 6 11/16/83 DTT ADDED DEVICE ID TO SIMULATE DEVICE INDEPENDENCE 27 5 12spt83 DTT MODIFIED ERROR SYSTEM TO WRITE ERRORS TO CSA AREA 28 4 08aug83 DTT SIMULATES WRITES! 29 3 07jul83 DTT ADDED KILL_TAPE/CSA 30 2 30jun83 DTT STATE MACHINE FOR MULTI TASKING 31 1 05apr83 DTT BINK ON I/O ERROR, REMOVING TIMING STUFF, EI AND DI ADDED. 32 0 10feb83 DTT Initial Pseudo Code 33 34 NAME: TAPE_MANAGER (OVERLAY CONTROL) 35 36 37 FUNCTION: (LOAD OVERLAYS VIA SIMULATED I/O WITH THE HP64000) 38 39 40 INPUTS: (ACCUMULATOR = OVERLAY NUMBER) 41 42 43 OUTPUTS: (OVERLAY IS LOADED TO RAM ADDRESS) 44 45 46 PSEUDOCODE: (PASCAL type pseudocode of procedure.) 47 48 49 50 ---------------- overlay request? Y ---------------- 51 : :-----------------------> : : 52 :---->: IDLE : : RENAME : 53 : : : : : 54 : : :---------: : : 55 : ---------------- : ---------------- 56 : /:\ overlay request? N : FILE: TAPE_MANA:TOS HEWLETT-PACKARD: TAPE_MANAGER (c) Coleco 1983 Confidential Tue, 15 May 1984, 20:30 Page 2 57 : :______________: : 58 : : 59 : : 60 : : 61 : : 62 : : 63 : : 64 : \:/ 65 : ---------------- ---------------- 66 : : : : : 67 : : READ : <--------------------------: OPEN : 68 : : FIRST : : : 69 : : RECORD : : : 70 : ------:--------- ---------------- 71 : : 72 : : 73 : \:/ 74 : ---------------- ---------------- 75 : : :------------------------> : : 76 : : READ : : MOVE DATA : 77 : : DATA : end of file? N : FROM BUFFER : 78 : : RECORD : <--------------------------: TO RAM : 79 : ---------------- --------:------- 80 : : 81 : end of file? Y 82 : \:/ 83 : ---------------- ---------------- 84 : : : : : 85 -----: PRE IDLE STATE :<---------------------------: CLOSE : 86 :(WAIT FOR CLOSE): : : 87 : : : : 88 ---------------- ---------------- 89 ENDESCR_1 MEND 90 91 DESC_a MACRO 92 .GOTO DESC_a 93 *********************************************************************************************** 94 Each transition state looks like this: 95 96 97 from previous 98 =================: 99 state : 100 \:/ 101 ----------------: ----------------- 102 : : I/O errors? Y : : 103 : TRANSITION :-------------------> : ERROR STATE : 104 :===>: : : (terminate) :----: 105 : : :=====: : : : 106 : ---------------- : ----------:------ : 107 : : : /:\ : 108 : : : : : 109 : sim i/o : \:/ :___________: 110 ------------ ---------------- to state 6 111 function : :============> 112 complete? N : TEST FOR : 113 : ABORT :to state 7 FILE: TAPE_MANA:TOS HEWLETT-PACKARD: TAPE_MANAGER (c) Coleco 1983 Confidential Tue, 15 May 1984, 20:30 Page 3 114 : REQUEST :============> 115 ---------------- 116 no : 117 abort : to next 118 : state 119 \:/ 120 121 DESC_a MEND 122 123 DESC_2 MACRO 124 .GOTO DESC_2 125 * 126 *************************************************************************************** 127 * 128 129 COMMON ATTRIBUTE AREAS (COMMUNICATION BUFFER WITH HP) 130 ALL VALUES ARE HEXADECIMAL 131 132 1) ASSIGN FILENAME TO CA 133 CA CA+1 CA+2 CA+n 134 -------- -------- -------- -------- -------- -------- -------- -------- 135 : 8A :LENGTH :FILENAME ------> : USER ID : NOT 136 : :BYTE :UP TO 9 BYTES : UP TO 5 BYTES : USED-----> 137 -------- -------- -------- -------- -------- -------- -------- -------- 138 LENGTH_BYTE := (((((LENGTH OF FILE NAME)+1)/2)-1)*32) + ((LENGTH OF USER ID)/2)*8) 139 FILENAME MUST BE ODD NUMBER OF BYTES LONG MAY BE PADDED WITH ONE SPACE. 140 USER ID MUST BE EVEN NUMBER OF BYTES LONG MAY BE PADDED WITH ONE SPACE. 141 142 2) OPEN 143 CA CA+1 CA+2 144 -------- -------- -------- -------- -------- -------- -------- -------- 145 : 81 : 04 : 00 : NOT 146 : : : : USED-------------------------------> 147 -------- -------- -------- -------- -------- -------- -------- -------- 148 CA+1 MUST BE 04HEX DESIGNATES ABSOLUTE FILE WILL BE OPENED. 149 CA+2 MUST BE 00HEX DESIGNATES DISK NUMBER. 150 151 3) CLOSE 152 CA 153 -------- -------- -------- -------- -------- -------- -------- -------- 154 : 82 : NOT 155 : : USED -----------------------------------------------> 156 -------- -------- -------- -------- -------- -------- -------- -------- 157 158 4) READ 159 CA CA+1 CA+2 CA+4 CA+6 160 -------- -------- -------- -------- -------- -------- -------- -------- 161 : 87 : 80 : #BYTES TO LOAD : N/A : N/A : LOAD ADDRESS 162 : : : MSB : LSB : : : MSB : LSB 163 -------- -------- -------- -------- -------- -------- -------- -------- 164 CA+1 DEFINES THE BUFFER LENGTH IN WORDS - 1 MUST BE LOADED BEFORE CALLING SIM I/O 165 CA+2 DEFINES NUMBER OF BYTES TO MOVE TO RAM FROM THE SIM I/O BUFFER 166 CA+6 DEFINES THE RAM ADDRESS TO LOAD TO 167 CA+8 (NOT SHOWN) IS THE START OF THE SIM I/O BUFFER 168 NOTE: CA+2 AND CA+6 ARE ONE WORD LONG BUT NOT STORED AS Z80 WORDS. 169 THE Z80 EXPECTS WORD VALUES TO BE STORED LSB/MSB. 170 FILE: TAPE_MANA:TOS HEWLETT-PACKARD: TAPE_MANAGER (c) Coleco 1983 Confidential Tue, 15 May 1984, 20:30 Page 4 171 DESC_2 172 MEND 173 174 175 176 NEXT_STATE MACRO LP1 177 LD A,LP1 ;SOMETHING IN THE COMMAND BUFFER! 178 LD [TAPE_STATE],A 179 LD HL,[STATE_VECTORS+LP1+LP1] 180 LD [NEXT_STATE_ADDRESS],HL 181 JP END_OF_STATE_MACHINE 182 MEND 183 ;SUBROUTINES CALLED: 184 ; EXT 185 186 ;OPERATING SYSTEM CALLS: 187 188 ;EXTERNAL DATA AREAS USED: 189 EXT KILL_TAPE 190 EXT WRITE_TAPE 191 EXT CSA 192 EXT TAPE_STATE 193 EXT OVERLAY_NUMBER 194 195 ;GLOBAL DATA AREAS DEFINED: 196 GLOBAL DEVICE_ID 197 198 ;LOCAL EQUATES 199 7400 CA EQU 07400H ;COMMON ATTRIBUTES AREA FOR SIM I/O 200 7401 BUF_LEN EQU CA+1 201 7401 FILETYPE EQU CA+1 ;FILETYPE ADDRESS IN C_A_ 202 7402 DISC_NUM EQU FILETYPE+1 ;DISK NUMBER ADDRESS IN C_A_ 203 7402 REC_LEN EQU CA+2 ;RECORD LENGTH ADDRESS IN C_A_ 204 7408 BUFFER EQU CA+8 ;I_O_BUFFER 205 7401 RNAM_BUF EQU CA+1 ;RENAME BUFFER AREA 206 7404 LOADADDR EQU CA+4 ;ADDRESS OF MEM ADDRESS OF OVERLAY 207 208 0080 MAXBUFLN EQU 128 ;UP TO 128 WORDS MAY BE READ IN 209 0004 ABSOLUTE EQU 004H ;FILE TYPE IS ABSOLUTE 210 0081 OPEN EQU 081H 211 0082 CLOSE EQU 082H 212 0087 READ EQU 087H 213 0089 WRITE EQU 089H 214 008A RENAME EQU 08AH 215 216 ;GLOBAL EQUATES 217 ; INCLUDE equate file name 218 219 220 PROG 221 GLOBAL TAPE_MANAGER 222 223 GLOBAL INITIALIZE_TAPE 224 0000' INITIALIZE_TAPE: 225 GLOBAL INIT_TAPE 226 0000' INIT_TAPE: 227 0000' 3E 00 LD A,0 ;CLEAR THE HP64000 AREA FILE: TAPE_MANA:TOS HEWLETT-PACKARD: TAPE_MANAGER (c) Coleco 1983 Confidential Tue, 15 May 1984, 20:30 Page 5 228 0002' 32 0074 LD [CA],A 229 0005' 32 0000# LD [CSA],A ;AND THE TAPE CONTROL STATUS AREA 230 0008' 3D DEC A 231 0009' 32 0000# LD [OVERLAY_NUMBER],A ;MAKE THE OVERLAY NUMBER -1 (INVALID) 232 000C' NEXT_STATE 0 ;SET THE IDLE STATE! 233 000C' 3E 00 A LD A,0 ;SOMETHING IN THE COMMAND BUFFER! 234 000E' 32 0000# A LD [TAPE_STATE],A 235 0011' 2A 4100' A LD HL,[STATE_VECTORS+0+0] 236 0014' 22 0000" A LD [NEXT_STATE_ADDRESS],HL 237 0017' C3 6A01' A JP END_OF_STATE_MACHINE 238 001A' C9 RET 239 240 001B' TAPE_MANAGER: 241 ;BEGIN (Ordinarily registers are restored; retain only the pushes and pops you need.) 242 243 001B' 3A 0074 LD A,[CA] ;TEST THE STATUS OF THE FILE 244 001E' B7 OR A 245 001F' FA 6A01' JP M,END_OF_STATE_MACHINE ;IF THERE IS A COMMAND IN THE BUFFER 246 0022' 28 05 JR Z,AB_REQ 247 0024' FE 01 CP 1 ;END OF FILE ON READ FROM HP64000 248 0026' C2 6C01' JP NZ,ERROR 249 ;* 250 ;* AT THIS POINT ANY SIM I/O FUNCTIONS ARE COMPLETE; TEST FOR ABORTS (KILLS) 251 ;* 252 GLOBAL AB_REQ 253 0029' 3A 0000# AB_REQ: LD A,[CSA] ;IF COMMAND IS TO KILL TAPE COMMAND 254 002C' FE ?? CP KILL_TAPE 255 002E' 20 0D JR NZ,CASE_STATE 256 0030' 3A 0000# LD A,[TAPE_STATE] ;CHECK THE STATE OF THE TAPE 257 ;* 258 0033' FE 03 CP 3 ;CHECK STATE 0,1,2 259 0035' DA 3D01' JP C,STATE_PRE_IDLE ;FILE NOT OPENED 260 ;* 261 0038' FE 06 CP 6 ;STATE 3,4,5 262 003A' DA 2A01' JP C,STATE_CLOSE ;FILE OPENED TRY TO CLOSE IT 263 ;* 264 ;* FALL THRU TO CASE STATEMENT ;IF STATE = 6,7 265 ;* ;FILE IS TRYING TO CLOSE 266 ;* 267 ;* 268 ;* CASE TAPE_STATE,(IDLE,RENAME,OPEN,READ1,READ2,MOVE2VRAM,CLOSE,PRE_IDLE) 269 ;* 270 003D' CASE_STATE: 271 ;* 272 ;* 273 003D' 2A 0000" LD HL,[NEXT_STATE_ADDRESS] 274 0040' E9 JP [HL] 275 0041' STATE_VECTORS: 276 0041' 5300' DEFW STATE_IDLE ;STATE 0 277 0043' 6800' DEFW STATE_RENAME ; 1 278 0045' A200' DEFW STATE_OPEN ; 2 279 0047' C200' DEFW STATE_READ_1 ; 3 280 0049' DA00' DEFW STATE_READ_2 ; 4 281 004B' F200' DEFW STATE_MOVE2RAM ; 5 282 004D' 2A01' DEFW STATE_CLOSE ; 6 283 004F' 3D01' DEFW STATE_PRE_IDLE ; 7 284 0051' 5401' DEFW WRITE_1 FILE: TAPE_MANA:TOS HEWLETT-PACKARD: TAPE_MANAGER (c) Coleco 1983 Confidential Tue, 15 May 1984, 20:30 Page 6 285 ;* 286 ;* IF THE MACHINE IS IDLE IT'S OK TO TEST FOR ANOTHER READ REQUEST 287 ;* 288 0053' STATE_IDLE: ;STATE 0 289 0053' 3A 0000# LD A,[CSA] ;TEST THE COMMAND STATUS AREA 290 0056' B7 OR A 291 0057' CA 6A01' JP Z,END_OF_STATE_MACHINE 292 ;* 293 005A' NEXT_STATE 1 294 005A' 3E 01 A LD A,1 ;SOMETHING IN THE COMMAND BUFFER! 295 005C' 32 0000# A LD [TAPE_STATE],A 296 005F' 2A 4300' A LD HL,[STATE_VECTORS+1+1] 297 0062' 22 0000" A LD [NEXT_STATE_ADDRESS],HL 298 0065' C3 6A01' A JP END_OF_STATE_MACHINE 299 ;* 300 ;* ASSIGN THE SIM I/O FILE TO THE CURRENT OVERLAY NAME 301 ;* 302 0068' STATE_RENAME: ;STATE 1 303 0068' 3A 0000# LD A,[OVERLAY_NUMBER] 304 006B' 21 8701' LD HL,SAMPLE_NAME 305 006E' 11 0174 LD DE,RNAM_BUF ;POINT TO THE RENAME BUFFER IN THE COMMON ATTRIBUTES AREA 306 0071' 01 0400 LD BC,SAMPLE_NAME_LEN ;NO NAME COULD BE MORE THAN TEN BYTES LONG COULD IT? 307 0074' ED B0 LDIR ;MOVE THE OVERLAY DATA TO THE RENAME BUFFER 308 ;* 309 ;* 310 ;* 311 0076' 01 300A LD BC,10*256+"0" ;GET THE OVERLAY NUMBER INTO ASCII 312 0079' OV_2_ASCII_1: 313 0079' B7 OR A 314 007A' 98 SBC A,B ;DIVIDE OVERLAY NUMBER BY 10 315 007B' 0C INC C ;SET THE NUMBER OF TENS IN C (DOESN'T RESET CARRY) 316 007C' 30 FB JR NC,OV_2_ASCII_1 ;CARRY WAS SET BY SUBTRACT IF B>A 317 007E' 0D DEC C ;SAVE THE TENS BYTE 318 007F' 80 ADD A,B ;ADD TENS TO GET THE REMAINDER 319 0080' 06 30 LD B,"0" ;SAVE THE ONES BYTE 320 0082' 80 ADD A,B 321 0083' 47 LD B,A 322 0084' 79 LD A,C 323 0085' FE 30 CP "0" ;CONVERT TO ASCII 324 0087' 20 02 JR NZ,OV_2_ASCII_2 325 0089' 3E 5F LD A,"_" ;SPECIAL CASE 326 008B' OV_2_ASCII_2: 327 008B' 12 LD [DE],A ;DE IS POINTING TO THE FILENAME FROM THE LDIR ABOVE 328 008C' 13 INC DE 329 008D' 78 LD A,B 330 008E' 12 LD [DE],A 331 ;* 332 ;* ASSIGN THE FILE 333 ;* 334 008F' 3E 8A LD A,RENAME 335 0091' 32 0074 LD [CA],A 336 ;* 337 0094' NEXT_STATE 2 ;NEXT OPEN 338 0094' 3E 02 A LD A,2 ;SOMETHING IN THE COMMAND BUFFER! 339 0096' 32 0000# A LD [TAPE_STATE],A 340 0099' 2A 4500' A LD HL,[STATE_VECTORS+2+2] 341 009C' 22 0000" A LD [NEXT_STATE_ADDRESS],HL FILE: TAPE_MANA:TOS HEWLETT-PACKARD: TAPE_MANAGER (c) Coleco 1983 Confidential Tue, 15 May 1984, 20:30 Page 7 342 009F' C3 6A01' A JP END_OF_STATE_MACHINE 343 ;* 344 ;* 345 00A2' STATE_OPEN: ;STATE 2 346 ;* 347 ;* OPEN THE FILE 348 ;* 349 00A2' 3E 04 LD A,ABSOLUTE ;LOAD THE FILE TYPE 350 00A4' 32 0174 LD [FILETYPE],A 351 00A7' 3E 00 LD A,0 ;DISK NUMBER 352 00A9' 32 0274 LD [DISC_NUM],A 353 00AC' 3E 81 LD A,OPEN ;OPEN THE CURRENT FILE 354 00AE' 32 0074 LD [CA],A 355 00B1' 3A 0000# LD A,[CSA] ;NEXT STATE READ OR WRITE? 356 00B4' NEXT_STATE 3 ;NEXT STATE = READ_1 357 00B4' 3E 03 A LD A,3 ;SOMETHING IN THE COMMAND BUFFER! 358 00B6' 32 0000# A LD [TAPE_STATE],A 359 00B9' 2A 4700' A LD HL,[STATE_VECTORS+3+3] 360 00BC' 22 0000" A LD [NEXT_STATE_ADDRESS],HL 361 00BF' C3 6A01' A JP END_OF_STATE_MACHINE 362 00C2' STATE_READ_1: ;STATE 3 363 ;* 364 ;* READ THE FIRST RECORD TO SKIP OVER IT 365 ;* 366 00C2' 3E 80 LD A,MAXBUFLN ;SET THE INPUT BUFFER LENGTH 367 00C4' 32 0174 LD [BUF_LEN],A ; 368 00C7' 3E 87 LD A,READ 369 00C9' 32 0074 LD [CA],A ;READ THE FIRST RECORD 370 371 00CC' NEXT_STATE 4 372 00CC' 3E 04 A LD A,4 ;SOMETHING IN THE COMMAND BUFFER! 373 00CE' 32 0000# A LD [TAPE_STATE],A 374 00D1' 2A 4900' A LD HL,[STATE_VECTORS+4+4] 375 00D4' 22 0000" A LD [NEXT_STATE_ADDRESS],HL 376 00D7' C3 6A01' A JP END_OF_STATE_MACHINE 377 378 ;* 379 ;* READ REMAINING RECORDS AND MOVE TO RAM 380 ;* 381 00DA' STATE_READ_2: ;STATE 4 382 00DA' 3E 80 LD A,MAXBUFLN ;SET THE INPUT BUFFER LENGTH 383 00DC' 32 0174 LD [BUF_LEN],A ; 384 00DF' 3E 87 LD A,READ ; 385 00E1' 32 0074 LD [CA],A 386 387 00E4' NEXT_STATE 5 ;NEXT STATE = READ A DATA RECORD 388 00E4' 3E 05 A LD A,5 ;SOMETHING IN THE COMMAND BUFFER! 389 00E6' 32 0000# A LD [TAPE_STATE],A 390 00E9' 2A 4B00' A LD HL,[STATE_VECTORS+5+5] 391 00EC' 22 0000" A LD [NEXT_STATE_ADDRESS],HL 392 00EF' C3 6A01' A JP END_OF_STATE_MACHINE 393 394 ;* 395 ;* MOVE THE LAST BUFFER TO RAM 396 ;* 397 00F2' STATE_MOVE2RAM: ;STATE 5 398 00F2' 3A 0074 LD A,[CA] ;CHECK THE RETURN STATUS FILE: TAPE_MANA:TOS HEWLETT-PACKARD: TAPE_MANAGER (c) Coleco 1983 Confidential Tue, 15 May 1984, 20:30 Page 8 399 00F5' B7 OR A 400 00F6' 28 0E JR Z,NO_EOF ;END OF FILE? 401 ;* 402 ;* 403 404 00F8' NEXT_STATE 6 ;NEXT STATE = CLOSE FILE 405 00F8' 3E 06 A LD A,6 ;SOMETHING IN THE COMMAND BUFFER! 406 00FA' 32 0000# A LD [TAPE_STATE],A 407 00FD' 2A 4D00' A LD HL,[STATE_VECTORS+6+6] 408 0100' 22 0000" A LD [NEXT_STATE_ADDRESS],HL 409 0103' C3 6A01' A JP END_OF_STATE_MACHINE 410 0106' NO_EOF: ;MOVE THE CURRENT OVERLAY TO MEMORY 411 0106' 2A 0274 LD HL,[REC_LEN] ;GET THE NUMBER OF BYTES TO MOVE TO RAM 412 0109' 4C LD C,H 413 010A' 45 LD B,L 414 ;* 415 010B' 2A 0474 LD HL,[LOADADDR] ;GET THE LOAD ADDRESS AND CHECK TO SEE IF IT IS IN VRAM 416 010E' 55 LD D,L 417 010F' 5C LD E,H 418 0110' 21 0874 LD HL,BUFFER ;FROM ADDRESS 419 420 0113' 3A 0000# LD A,[CSA] 421 0116' FE ?? CP WRITE_TAPE 422 0118' 28 3A JR Z,WRITE_1 423 424 011A' ED B0 LDIR 425 ;* 426 427 011C' NEXT_STATE 4 ;NEXT STATE = READ A DATA RECORD 428 011C' 3E 04 A LD A,4 ;SOMETHING IN THE COMMAND BUFFER! 429 011E' 32 0000# A LD [TAPE_STATE],A 430 0121' 2A 4900' A LD HL,[STATE_VECTORS+4+4] 431 0124' 22 0000" A LD [NEXT_STATE_ADDRESS],HL 432 0127' C3 6A01' A JP END_OF_STATE_MACHINE 433 ;* 434 ;* CLOSE OVERLAY FILE 435 ;* 436 012A' STATE_CLOSE: ;STATE 6 437 012A' 3E 82 LD A,CLOSE ;CLOSE THE FILES 438 012C' 32 0074 LD [CA],A 439 440 012F' NEXT_STATE 7 ;NEXT STATE = PRE-IDLE 441 012F' 3E 07 A LD A,7 ;SOMETHING IN THE COMMAND BUFFER! 442 0131' 32 0000# A LD [TAPE_STATE],A 443 0134' 2A 4F00' A LD HL,[STATE_VECTORS+7+7] 444 0137' 22 0000" A LD [NEXT_STATE_ADDRESS],HL 445 013A' C3 6A01' A JP END_OF_STATE_MACHINE 446 ;* 447 ;* 448 ;* NEXT STATE IS IDLE 449 ;* 450 013D' STATE_PRE_IDLE: ;STATE 7 451 013D' 3E 00 LD A,0 ;NEXT STATE = PRE-IDLE 452 013F' 32 0000# LD [CSA],A ;CLEAR THE COMMAND STATUS BUFFER 453 0142' 3D DEC A 454 0143' 32 0000# LD [OVERLAY_NUMBER],A ;SET THE OVERLAY NUMBER TO OUT OF RANGE 455 0146' NEXT_STATE 0 FILE: TAPE_MANA:TOS HEWLETT-PACKARD: TAPE_MANAGER (c) Coleco 1983 Confidential Tue, 15 May 1984, 20:30 Page 9 456 0146' 3E 00 A LD A,0 ;SOMETHING IN THE COMMAND BUFFER! 457 0148' 32 0000# A LD [TAPE_STATE],A 458 014B' 2A 4100' A LD HL,[STATE_VECTORS+0+0] 459 014E' 22 0000" A LD [NEXT_STATE_ADDRESS],HL 460 0151' C3 6A01' A JP END_OF_STATE_MACHINE 461 ;* 462 ;* WRITE OUT 256 DATA BYTES TO AN OVERLAY! OH BOY! 463 ;* 464 0154' WRITE_1: ;GET HERE FROM MOVE2RAM1 465 0154' EB EX DE,HL 466 0155' ED B0 LDIR 467 0157' 3E 89 LD A,WRITE 468 0159' 32 0074 LD [CA],A 469 015C' NEXT_STATE 6 470 015C' 3E 06 A LD A,6 ;SOMETHING IN THE COMMAND BUFFER! 471 015E' 32 0000# A LD [TAPE_STATE],A 472 0161' 2A 4D00' A LD HL,[STATE_VECTORS+6+6] 473 0164' 22 0000" A LD [NEXT_STATE_ADDRESS],HL 474 0167' C3 6A01' A JP END_OF_STATE_MACHINE 475 ;* 476 ;* 477 ;* 478 479 ; END (TAPE_MANAGER) 480 481 016A' END_OF_STATE_MACHINE: 482 016A' AF XOR A 483 016B' C9 RET 484 ;*************************************************************************** 485 ;*************************************************************************** 486 016C' ERROR: 487 ; BEGIN (Ordinarily registers are restored; retain only the pushes and pops you need.) 488 489 016C' 4F LD C,A 490 016D' 3A 0000# LD A,[OVERLAY_NUMBER] ;SAVE THE OVERLAY NUMBER IN A 491 0170' 47 LD B,A 492 0171' 3A 0000# LD A,[TAPE_STATE] 493 0174' 21 0000 LD HL,0 ;B HAS THE FUNCTION CODE 494 0177' 77 LD [HL],A ;C HAS THE ERROR CODE 495 ; 496 ; LD [HL] HAS JUST CAUSED A BINK TO OCCUR ON THE HP64000 497 ; THIS IS TO LET THE USER KNOW THERE HAS BEEN AN ERROR 498 ; 499 0178' AF XOR A 500 0179' 32 0074 LD [CA],A ;CLEAR THE ERROR FROM THE HP64000 501 017C' 3C INC A ;PRETEND THE ERROR WAS A CRC CHECK FROM ADAM'S TAPE 502 017D' 32 0000# LD [CSA],A 503 0180' 2A 4100' LD HL,[STATE_VECTORS+0000] 504 0183' 22 0000" LD [NEXT_STATE_ADDRESS],HL 505 0186' C9 RET 506 507 ; END (TAPE_ERR) 508 509 ;*************************************************************************** 510 ;*************************************************************************** 511 ; 512 ; OVERLAY NAMES FILE: TAPE_MANA:TOS HEWLETT-PACKARD: TAPE_MANAGER (c) Coleco 1983 Confidential Tue, 15 May 1984, 20:30 Page 10 513 ; 514 ; -------- -------- -------- -------- -------- 515 ; :LENGTH :FILENAME ------> : USER ID : 516 ; :BYTE :UP TO 9 BYTES : UP TO 5 BYTES : 517 ; -------- -------- -------- -------- -------- 518 ; LENGTH_BYTE := (((((LENGTH OF FILE NAME)+1)/2)-1)*32) + ((LENGTH OF USER ID)/2)*8) 519 ; FILENAME MUST BE ODD NUMBER OF BYTES LONG MAY BE PADDED WITH ONE SPACE. 520 ; USER ID MUST BE EVEN NUMBER OF BYTES LONG MAY BE PADDED WITH ONE SPACE. 521 ; 522 ;***************************************************************************************** 523 ;***************************************************************************************** 524 ;* 525 ;* OVERLAY NAME 0 526 ;* 527 0187' SAMPLE_NAME 528 0187' 40 OVLAY0 DEFB FL_NM_LN0*32+US_ID_LN0*8 ;LENGTH DESCRIPTION BYTE 529 0188' 4F 56 4C 5F NAM_0 DEFB "OVL_1" ;MUST BE ODD NUMBER OF LETTERS 530 018C' 31 531 018D' USID0 DEFB "" ;MUST BE EVEN NUMBER OF LETTERS 532 0002 FL_NM_LN0 EQU ((USID0-NAM_0+1)/2)-1 ;LENGTH OF FILENAME IN WORDS 533 0000 US_ID_LN0 EQU ($-USID0)/2 ;LENGTH OF USERID IN WORDS 534 0004 SAMPLE_NAME_LEN EQU $-SAMPLE_NAME-2 ;NUMBER OF BYTES TO MOVE = 4 535 ;*********************************************************************** 536 DATA 537 GLOBAL NEXT_STATE_ADDRESS 538 0000" 0002 NEXT_STATE_ADDRESS DEFS 2 ;POINTER TO NEXT ENTRY STATE 539 0002" 0001 DEVICE_ID DEFS 1 ;DEVICE INDEPENDENCE SIMULATED 0 Error(s) Detected. 397 Program Bytes. 3 Data Bytes. 49 Symbols Detected. FILE: TAPE_MANA:TOS HEWLETT-PACKARD: TAPE_MANAGER (c) Coleco 1983 Confidential Tue, 15 May 1984, 20:30 Page 11 Value Symbol Defined Referenced: 0004 ABSOLUTE 209 349 0029' AB_REQ 253 246 252 7408 BUFFER 204 418 7401 BUF_LEN 200 367 383 7400 CA 199 200 201 203 204 205 206 228 243 335 354 369 385 398 438 468 500 003D' CASE_STATE 270 255 0082 CLOSE 211 437 0000# CSA 191 229 253 289 355 420 452 502 0002" DEVICE_ID 539 196 7402 DISC_NUM 202 352 016A' END_OF_STATE_MACHINE 481 237 245 291 298 342 361 376 392 409 432 445 460 474 016C' ERROR 486 248 7401 FILETYPE 201 202 350 0002 FL_NM_LN0 532 528 0000' INITIALIZE_TAPE 224 223 0000' INIT_TAPE 226 225 0000# KILL_TAPE 189 254 7404 LOADADDR 206 415 0080 MAXBUFLN 208 366 382 0188' NAM_0 530 532 0000" NEXT_STATE_ADDRESS 538 236 273 297 341 360 375 391 408 431 444 459 473 504 537 0106' NO_EOF 410 400 0081 OPEN 210 353 0000# OVERLAY_NUMBER 193 231 303 454 490 0187' OVLAY0 528 0079' OV_2_ASCII_1 312 316 008B' OV_2_ASCII_2 326 324 0087 READ 212 368 384 7402 REC_LEN 203 411 008A RENAME 214 334 7401 RNAM_BUF 205 305 0187' SAMPLE_NAME 527 304 534 0004 SAMPLE_NAME_LEN 534 306 012A' STATE_CLOSE 436 262 282 0053' STATE_IDLE 288 276 00F2' STATE_MOVE2RAM 397 281 00A2' STATE_OPEN 345 278 013D' STATE_PRE_IDLE 450 259 283 00C2' STATE_READ_1 362 279 00DA' STATE_READ_2 381 280 0068' STATE_RENAME 302 277 0041' STATE_VECTORS 275 235 296 340 359 374 390 407 430 443 458 472 503 001B' TAPE_MANAGER 240 221 0000# TAPE_STATE 192 234 256 295 339 358 373 389 406 429 442 457 471 492 018D' USID0 531 532 533 0000 US_ID_LN0 533 528 0089 WRITE 213 467 0154' WRITE_1 464 284 422 0000# WRITE_TAPE 190 421